package com.lifeng.service;

import com.lifeng.dto.LoginDto;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

/**
 * @author:lifeng
 * @date:2020/4/9 14:18
 */
@Service
public class TokenService {
    @Resource
    private RedisTemplate redisTemplate;

    public String creteToken(LoginDto loginDto){
        String token = UUID.randomUUID().toString();
        redisTemplate.opsForValue().set("login:token:"+token,loginDto,30, TimeUnit.MINUTES);
        return token;
    }

    public void refreshToken(String token,LoginDto loginDto){
        if(StringUtils.isNotEmpty(token)){
            redisTemplate.opsForValue().set("login:token:"+token,loginDto,30, TimeUnit.MINUTES);
        }
    }

    public void deleteToken(String token){
        redisTemplate.delete("login:token:"+token);
    }

    public LoginDto getLoginInfo(String token){
        return (LoginDto) redisTemplate.opsForValue().get("login:token:"+token);
    }

    public LoginDto getLoginInfo(HttpServletRequest request){
        String token = request.getHeader("token");
        return getLoginInfo(token);
    }

    public boolean verifyToken(String token){
        LoginDto loginDto = (LoginDto) redisTemplate.opsForValue().get("login:token:"+token);
        if(loginDto!=null){
            refreshToken(token,loginDto);
            return true;
        }else{
            return false;
        }
    }
}
